home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / UNIX / C / C-STYLE / STYLE_ST.C < prev    next >
C/C++ Source or Header  |  1992-11-23  |  3KB  |  110 lines

  1.         /************************/
  2.         /* Analys style metrics */
  3.         /************************/
  4.  
  5. #define        PARAMS 11
  6.  
  7. main()
  8. {
  9.     static int
  10.         max[]    = {  9, 12, 12, 11,  8, 15,  6, 14, -20,  5,  8},
  11.  
  12.             /*  ch  cl  in  bl  sp  ml  rw  id   go  if  df  */
  13.         
  14.         L[]    = {  8,  8,  8,  8,  1,  4,  4,  4,   1,  0, 10 },
  15.         S[]    = { 12, 15, 24, 15,  4, 10, 16,  5,   3,  3, 15 },
  16.         F[]    = { 25, 25, 48, 30, 10, 25, 30, 10, 199,  3, 25 },
  17.         H[]    = { 30, 35, 60, 35, 12, 35, 36, 14, 200,  4, 30};
  18.     
  19.     float param[PARAMS];
  20.  
  21.     static char
  22.         *ident[] = { "  chars per line        ",    /* ch */
  23.                  "% comment lines        ",    /* cl */
  24.                  "% indentation        ",    /* in */
  25.                  "% blank lines        ",    /* bl */
  26.                  "  spaces per line        ",    /* sp */
  27.                  "  module length        ",    /* ml */
  28.                  "  reserved words        ",    /* rw */
  29.                  "  identifier length    ",     /* id */
  30.                  "  goto's            ",    /* go */
  31.                  "  include files        ",    /* if */
  32.                  "% define's            " };    /* df */
  33.     int i;
  34.  
  35.     float    blank, non_blank, comments, includes, defines,
  36.         indented, embedded, modules, jumps, ids,
  37.         name_length, score, old_score, fact, total_chars,
  38.         word_count, line_count, total_lines, lines, f;
  39.     char    s[8];
  40.  
  41.     /* Read in the metrics. */
  42.  
  43.     for ( i = 0; i < 16; i++ )
  44.     {
  45.         scanf ( "%s %f", s, &f );
  46.  
  47.              if ( strcmp(s, "IF") == 0) includes = f;
  48.         else if ( strcmp(s, "DF") == 0) defines = f;
  49.         else if ( strcmp(s, "NR") == 0) lines = f;
  50.         else if ( strcmp(s, "NL") == 0) name_length = f;
  51.         else if ( strcmp(s, "ID") == 0) ids = f;
  52.         else if ( strcmp(s, "RW") == 0) word_count = f;
  53.         else if ( strcmp(s, "CL") == 0) comments = f;
  54.         else if ( strcmp(s, "TL") == 0) total_lines = f;
  55.         else if ( strcmp(s, "LC") == 0) line_count = f;
  56.         else if ( strcmp(s, "NB") == 0) non_blank = f;
  57.         else if ( strcmp(s, "IN") == 0) indented = f;
  58.         else if ( strcmp(s, "TC") == 0) total_chars = f;
  59.         else if ( strcmp(s, "BL") == 0) blank = f;
  60.         else if ( strcmp(s, "IM") == 0) embedded = f;
  61.         else if ( strcmp(s, "MO") == 0) modules = f;
  62.         else if ( strcmp(s, "JU") == 0) jumps = f;
  63.     }
  64.  
  65.     /*  Perform Analysis */
  66.  
  67.                 line_count     = lines - blank;
  68.     if (line_count)        non_blank    /= line_count;
  69.     if (total_lines)    comments    /= total_lines / 100;
  70.     if (total_chars)    indented    /= total_chars / 100;
  71.     if (lines)        blank        /= lines / 100;
  72.     if (line_count)        embedded    /= line_count;
  73.     if (modules)        modules          = line_count / modules;
  74.     if (ids)        defines        /= ids / 100;
  75.  
  76.     param[0]  = non_blank;
  77.     param[1]  = comments;
  78.     param[2]  = indented;
  79.     param[3]  = blank;
  80.     param[4]  = embedded;
  81.     param[5]  = modules;
  82.     param[6]  = word_count;
  83.     param[7]  = name_length;
  84.     param[8]  = jumps;
  85.     param[9]  = includes;
  86.     param[10] = defines;
  87.  
  88.     old_score = 0;
  89.  
  90.     for ( i = 0; i < PARAMS; i++ )
  91.     {
  92.         if( S[i] <= param[i] && param[i] <= F[i] )
  93.             score += max[i];
  94.         else if ( L[i] <= param[i] && param[i] < S[i] )
  95.         {
  96.             fact = (param[i] - L[i]) / (S[i] - L[i]);
  97.             score += max[i] * fact;
  98.         }
  99.         else if ( F[i] < param[i] && param[i] <= H[i])
  100.         {
  101.             fact = ( H[i] - param[i] ) / ( H[i] - F[i] );
  102.             score += max[i] * fact;
  103.         }
  104.         printf("\n%5.1f%s : %5.1f\t(max %3d)",
  105.             param[i], ident[i], score-old_score, max[i]);
  106.         old_score = score;
  107.     }
  108.     printf("\n\nScore %5.1f\n",score);
  109. }
  110.